2023/12/233626字符

Array

两种创建方法

var arr = new Array(10);  // 创建十个空数组 (第一位不能写小数)
var arr = [10];  // 创建数组,内有一个 10

console.log(new Array(10));  //--> empty*10  ES5
console.log(arr[-1]);  //--> undefined 数组不会报错

改变原数组

var arr = [];
arr[0] = 0;  // 更改数组内容
arr[3] = 3;
console.log(arr);  //-->  0,,,3
var arr = [2, 3, 4, 5, 6];
arr.unshift(1);  //--> [1,2,3,4,5,6]  头部添加元素
arr.shift();  //--> [3,4,5,6]  头部剪切元素
arr.push(7);  //--> [2,3,4,5,6,7]  尾部添加元素
arr.pop();  //--> [2,3,4,5]  尾部剪切元素
delete arr[2];  //--> [2,3,5,6]  删除指定元素
arr.reverse();  //--> [6,5,4,3,2]  颠倒顺序
var arr = [1,2,3,4,5];
splice(-3, 2);  //--> [1,2,5]  arr.splice(从倒数第几位开始, 截取多少长度, 在切口处添加新的数据)

用 splice() 将 4 添加到 3 和 5 的中间

var arr = [1, 2, 3, 5];
console.log(arr.splice(3, 0, 4));  //--> [1,2,3,4,5]

push 原理

Array.prototype.push = function () {
    for(var i = 0; i < arguments.length; i ++){
        this[this.length] = arguments[i];
    }
    return this.length;
}

splice 原理

splice = function (pst) {
    pst += pst > 0 ? 0 : this.length;
}

数组排序

arr.sort();  // 升序(只检测首位数字)
arr.sort().reverse();  // 倒序(只检测首位数字)

arr.sort(function (a, b) {
    return a - b;  // 升序
        // a - b;  // 倒序
});

arr.sort(function () {
    return Math.random() - 0.5;  // 乱序
});

用 sort() 方法将数组按字节长度排序

var arr = ["abc", "汪汪汪", "王", "老王", "小王"];
function retBytes (str) {
    var num = str.length;
    for (var i = 0; i < num; i ++) {
        if (str.charCodeAt(i) > 255) {
            num ++;
        }  
    }
    return num;
}
arr.sort(function (a, b) {
    return retBytes(a) - retBytes(b);
});  //-->  ["王", "abc", "老王", "小王", "汪汪汪"]

不改变原数组

concat() 连接两个或多个数组

var arr = [2, 3, 4, 5, 6],
    arr1 = [7, 8, 9],
    arr2 = "arroge";
arr.concat(arr1, arr2);  //-->  2,3,4,5,6,7,8,9,"arroge"

string

arr.toString();  //--> "2,3,4,5,6"  转换为字符串
arr.join("/");  //--> [2/3/4/5/6]  更改分隔符
arr.split("/");  //--> ["2","3","4","5","6"]  将字符串分割成字符串数组
arr.split("4");  //--> ["2-3-","-5-6"]

slice() 截取数组

arr.slice(1, 3);  //--> [3,5]  截取数组
arr.slice(-2);  //--> [5, 6]  从倒数第几位开始截取之后数组
arr.slice();  //--> [2, 3, 4, 5, 6]  整个截取(类数组转换为数组,克隆)

数组去重

function unique(arr){
    var newArr = [];
    for(var i = 0;i < arr.length; i ++){
        if(newArr.indexOf(arr[i]) == -1){
            newArr.push(arr[i]);
        }
    }
    return newArr;
}
var arr = [1, 2, 3, 4, 5, 4, 3, 2, 1, 2, 3, 5, 4, 3, 4];
unique(arr);  //--> [1, 2, 3, 4, 5]

数组去重(在原型上添加方法)

Array.prototype.unique = function(){
    var temp = {},
        arr = [],
    for(var i = 0; i < this.length; i ++){
        if(!temp[this[i]]){
            temp[this[i]] = "str";
            arr.push(this[i]);
        }
    }
    return arr;
}
var arr = [1, 2, 3, 4, 5, 4, 3, 2, 1, 2, 3, 5, 4, 3, 4];
arr.unique();  //--> [1, 2, 3, 4, 5]